這一篇我們將實作 UITableView
的右滑刪除功能,並結合 Realm
資料庫來刪除相應的資料,讓資料庫內容與 UI 同步更新。這個功能可以提升使用者體驗,讓資料操作變得更加直覺與方便。
在 UITableView
中,我們可以透過實作 trailingSwipeActionsConfigurationForRowAt
方法,來定義當使用者向左滑動一列時顯示的動作按鈕,這裡我們實作了「移除」操作。
func tableView(_ tableView: UITableView,
trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
// 創建一個 "移除" 操作
let removeAction = UIContextualAction(style: .normal, title: "移除") { (_, _, completionHandler) in
// 使用 Realm 刪除數據
let realm = try! Realm()
let todos = realm.objects(dog.self)
let dd = todos[indexPath.row] // 根據行數取得對應的資料
try! realm.write {
realm.delete(dd) // 刪除資料庫中的該項資料
}
// 從 tableView 中刪除行並添加刪除動畫
tableView.deleteRows(at: [indexPath], with: .automatic)
// 告知系統操作已完成
completionHandler(true)
}
// 設定 "移除" 操作的背景顏色
removeAction.backgroundColor = UIColor.red
// 返回定義好的 swipe actions 配置
return UISwipeActionsConfiguration(actions: [removeAction])
}
創建刪除操作:
我們使用 UIContextualAction
來創建一個 "移除" 操作。當使用者點擊這個操作時,會觸發一段程式碼來刪除對應的數據。
操作 Realm 資料庫:
我們先取得 dog 類別的資料,然後透過索引取得指定行的資料。接著,進入 Realm 的 write 區塊中刪除該資料。
刪除動畫:
使用 tableView.deleteRows(at:with:)
方法,從 UI 中移除該行並帶有自動的動畫效果。
完成操作:
刪除操作完成後,必須呼叫 completionHandler(true)
來告知系統該操作已成功,這樣滑動的按鈕才能正常隱藏。
這段程式碼實作了右滑刪除功能,並將 UI 操作與 Realm 資料庫同步更新。這樣不僅可以提升使用者體驗,也確保資料的即時性。